/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.gbvbahia.vendas.modelos;

import java.io.Serializable;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

/**
 * Grupo não possui tela de CRUD, para criar novos grupos adicione na tabela
 * <i>access_group</i> e na tela de CRUD de usuários realize a associação com
 * os mesmos.
 *
 * @author Guilherme
 * @since 2013/02/25
 */
@Entity
@Table(name = "grupo")
public class Grupo implements Serializable {

    /**
     * Usuarios
     */
    public static final String USERS = "users";
    /**
     * Nome do grupo, o método de Único por grupo.<br> Não utiliza
     * sequence.<br> Não pode ser nulo.
     */
    @Id
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 50)
    @Column(name = "grupo_id", length = 50)
    private String grupoId;
    /**
     * String com pequena descrição sobre o grupo.
     */
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 50)
    @Column(name = "description", nullable = false, length = 50)
    private String description;
    /**
     * Quando um usuário é cadastrado, os grupos que forem marcados como true
     * será incluídos automaticamente no usuário a ser cadastrado.<br>
     * Logicamente que no momento do cadastro esses grupos poderão ser
     * alterados conforme necessidade.<br> <strong>Não existe implementação
     * para verificar essa informação no momento.</strong>
     */
    @Basic(optional = false)
    @Column(name = "user_dafeult", nullable = false)
    private boolean userDafeult = false;
    /**
     * Telas
     */
    @Transient
    private boolean marcado;

    /**
     * Construtor padrão.
     */
    public Grupo() {
    }

    /**
     * Construtor que recebe a String que será o Id do grupo.
     *
     * @param grupoId java.lang.String
     */
    public Grupo(String grupoId) {
        this.grupoId = grupoId;
    }

    public Grupo(String grupoId, String description, boolean marcado) {
        this.grupoId = grupoId;
        this.description = description;
        this.marcado = marcado;
    }

    /**
     * GrupoId do grupo.
     *
     * @return java.lang.String
     */
    public String getGrupoId() {
        return grupoId;
    }

    /**
     * Altera o grupoId, se já estiver salvo no banco de dados esse valor não
     * pode ser alterado.<br> Campo obrigatório.
     *
     * @param grupoId java.lang.String
     */
    public void setGrupoId(String grupoId) {
        this.grupoId = grupoId;
    }

    /**
     * Recupera a descrição do gruo
     *
     * @return java.lang.String
     */
    public String getDescription() {
        return description;
    }

    /**
     * Altera a descrição do grupo.<br> Campo obrigatório.
     *
     * @param description
     */
    public void setDescription(String description) {
        this.description = description;
    }

    /**
     * Verifica se é um grupo default.
     *
     * @return boolean.
     */
    public boolean getUserDafeult() {
        return userDafeult;
    }

    /**
     * Altera se o grupo é default.
     *
     * @param userDafeult boolean.
     */
    public void setUserDafeult(boolean userDafeult) {
        this.userDafeult = userDafeult;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (grupoId != null ? grupoId.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        if (!(object instanceof Grupo)) {
            return false;
        }
        Grupo other = (Grupo) object;
        if ((this.grupoId == null
                && other.grupoId != null)
                || (this.grupoId != null
                && !this.grupoId.equals(other.grupoId))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return grupoId;
    }

    public Serializable getId() {
        return grupoId;
    }

    public String getLabel() {
        return grupoId;
    }

    public boolean verificarId() {
        return true;
    }

    public void setMarcadoTransient(boolean marcado) {
        this.marcado = marcado;
    }

    public boolean isMarcadoTransient() {
        return marcado;
    }

}
